package chapter02.part01;

import chapter02.FileUtil;

import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;

/**
 * 文本输出
 * 
 * @author insight
 * @since 2021/8/6
 */
public class TextOutput {
    public static void main(String[] args) throws IOException {
        // 推荐使用 PrintWriter 以文本格式打印字符串和数字
        PrintWriter out = new PrintWriter(FileUtil.TEST_FILE_PATH,
                StandardCharsets.UTF_8);
        // 把内容输出到 writer 最后转换成字节写入文件 (?转换成字节 不太懂)
        // print printf println
        out.println("Print Something");
        out.flush();
        out.close();
        // println 会使用当前系统的换行符
        // 可以获取当前系统的换行符
        System.out.println(System.getProperty("line.separator"));
        
        // 可以设置为 autoflush 模式
        // println() 中会检查 autoflush
        out = new PrintWriter(FileUtil.getTestFileOutputStreamInstance(),
                true);
        out.println("autoflush");
        
        // 由于 print 不抛异常 所以可以使用 checkError 来检查
        boolean isOutError = out.checkError();
        
        /*
         * 以前 PrintStream 的输出方式有问题
         * 后来引入 Writer Reader 得到修正
         * 为了兼容 System.in out err 依旧是 IOStream 而不是 Writer Reader
         * 但是现在 PrintStream 内部采用和 PrintWriter 相同的方式
         * 使用 print / println 时 PrintStream 看起来像 PrintWriter
         * 不过 PrintStream 可以写入原生字节
         */
        PrintStream ps = new PrintStream(FileUtil.TEST_FILE_PATH);
        ps.write(2);
    }
}